`timescale 1ns / 1ns

module pll_test(
	input 			sysclk_i,
    input			reset_i,
    output [6:0]	up_led_o
);

wire        			clk_125_w;
wire        			pll_lock_w;
reg 		[27:0] 		cnt_r;


// 测试 pll extlock 输出
mypll mypll_u(
    .reset          (~reset_i),
    .refclk         (sysclk_i),
    .clk0_out       (clk_125_w),
    .extlock        (pll_lock_w)				// 锁住的时候（pll_lock_w=0），时钟不震荡
);



// 实现BUFG 全局时钟转换
wire					clk_125_global_w;
BUFG bufg_b(
    .i(clk_125_w),
    .o(clk_125_global_w)
);

// 实现跑马灯
//always @(posedge clk_125_w or negedge pll_lock_w) begin
always @(posedge clk_125_global_w) begin
    if(pll_lock_w == 1'b0) begin
         cnt_r = 26'b0;
//        cnt_r <= cnt_r + 1'b1;
    end
    else begin
        cnt_r <= cnt_r + 1'b1;
    end
	
    // cnt_r <= cnt_r + 1'b1;
end


// 实现同步块(实验成功)
wire					reset_sync;				// 同步之后的信号
sync_block sync_block_b(
  	.clk_i(sysclk_i),
    .data_i(reset_i),
    .data_o(reset_sync)
);


// 实验千兆网、百兆网 时钟生成(实验成功)
wire					client_tx_c_en_o_w;
wire 					gmii_tx_c_en_o_w;
wire 					rgmii_tx_c_en_o_w;
wire 					rgmii_tx_c_en_shift_o_w;
tx_clk_en_gen tx_clk_en_gen_blk(
  	.clk_i(clk_125_w),
    .reset_i(0),
    .speed10_100_i(1),
    .speed100_i(1),
    .client_tx_c_en_o_r(client_tx_c_en_o_w),
    .gmii_tx_c_en_o_r(gmii_tx_c_en_o_w),
    .rgmii_tx_c_en_o_r(rgmii_tx_c_en_o_w),
    .rgmii_tx_c_en_shift_o_r(rgmii_tx_c_en_shift_o_w)
);





// 实验ODDR(实验成功)
wire					oddr_clk_w;				// oddr输出时钟
EG_LOGIC_ODDR oddr_blk(
    .q(oddr_clk_w),
	.clk(clk_125_w),
    .d0(rgmii_tx_c_en_o_w),						// 慢时钟信号
	.d1(rgmii_tx_c_en_shift_o_w),				// 快时钟信号
    .rst(0)
);


assign				up_led_o = {cnt_r[26:25], pll_lock_w};
// assign  up_led_o = {clk_125_w, oddr_clk_w, client_tx_c_en_o_w, gmii_tx_c_en_o_w, rgmii_tx_c_en_o_w, rgmii_tx_c_en_shift_o_w};

endmodule
